package config

import (
	"time"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

// NewGorm 创建DB实例
func NewGorm(conf *Config) (*gorm.DB, error) {
	db, err := gorm.Open(mysql.New(mysql.Config{
		DSN:                       conf.MySQL.DSN(), // DSN data source name
		DefaultStringSize:         256,              // string 类型字段的默认长度
		DisableDatetimePrecision:  true,             // 禁用 datetime 精度，MySQL 5.6 之前的数据库不支持
		DontSupportRenameIndex:    true,             // 重命名索引时采用删除并新建的方式，MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
		DontSupportRenameColumn:   true,             // 用 `change` 重命名列，MySQL 8 之前的数据库和 MariaDB 不支持重命名列
		SkipInitializeWithVersion: false,            // 根据当前 MySQL 版本自动配置
	}), &gorm.Config{})

	//db, err := gorm.Open(conf.Gorm.DBType, conf.MySQL.DSN())
	if err != nil {
		return nil, err
	}
	if conf.Gorm.Debug {
		db = db.Debug()
	}
	err = db.DB().Ping()
	if err != nil {
		return nil, err
	}
	db.SingularTable(true)
	db.DB().SetMaxIdleConns(conf.Gorm.MaxIdleConns)
	db.DB().SetMaxOpenConns(conf.Gorm.MaxOpenConns)
	db.DB().SetConnMaxLifetime(time.Duration(conf.Gorm.MaxLifetime) * time.Second)
	return db, nil
}
